package br.ufrj.ad.evento;

import org.apache.log4j.Logger;

import br.ufrj.ad.As;
import br.ufrj.ad.entidade.Peer;
import br.ufrj.ad.entidade.Rodada;
import br.ufrj.ad.entidade.Seed;
import br.ufrj.ad.estatistica.Amostragem;

public class Saida extends Evento {

	private static final Logger log = Logger.getLogger(Saida.class);
	
	public Saida(Seed seed, Rodada rodada, As as) {
		super(seed.getTempoSaida(), seed, rodada, as);
	}

	@Override
	void proximoEvento(Rodada rodadaProximoEvento) {
		Seed seed = (Seed)peer;
		
		rodada.addTempoProTamanhoPopulacao(as.tamanhoPopulacao(), tempo - rodada.getTempoUltimaChegadaSaida());
		rodada.setTempoUltimaChegadaSaida(tempo);
		
		rodada.addSaida();
		
		as.seeds.remove(seed);
		as.eventos.removeAll(seed.getUploadsAgendados());
		log.debug(seed+" saiu em "+tempo);
		if(Amostragem.uniforme() < as.parametros.p) {
			as.eventos.add(new Chegada(tempo, new Peer(as), rodadaProximoEvento, as));
			log.debug(seed+" recomendou");
		}
		
	}

}
